package com.atguigu.gmall.item;


import com.atguigu.gmall.common.config.thread.annotation.EnableCustomThreadPool;
import org.springframework.boot.SpringApplication;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.scheduling.annotation.EnableScheduling;


/**
 * 整合redis
 * 1、引入依赖
 *         <dependency>
 *             <groupId>org.springframework.boot</groupId>
 *             <artifactId>spring-boot-starter-data-redis</artifactId>
 *         </dependency>
 * 2、配置redis信息
 *  spring:
 *    redis:
 *     host: 192.168.200.200
 *     password: lfy123456
 *     port: 6379
 *
 * 3、以后操作redis，只需要自动注入 RedisTemplate<Object, Object> 或者 StringRedisTemplate
 *
 * springboot的redis自动配置原理
 * RedisAutoConfiguration：
 *   1、@ConditionalOnClass({RedisOperations.class}) 项目中有这个类就自动配置
 *   2、@EnableConfigurationProperties({RedisProperties.class})
 *      开启 RedisProperties 类和配置文件的绑定功能
 *      1、RedisProperties 类的所有属性（以spring.redis开头）和配置文件绑定
 *      2、自动把 RedisProperties 的对象作为组件放在容器中。（任意时候需要RedisProperties这个组件了，自动注入就行）
 *   3、springboot默认给容器中放两个核心组件
 *      RedisTemplate<Object, Object>： key是Object，Value也是Object
 *      StringRedisTemplate： key，value都是string。覆盖99%场景
 *
 *   SpringBoot的一些设计模式；
 *   1、xxxAutoConfiguration：自动配置类，一般都是给容器中放很多核心组件
 *          RedisAutoConfiguration、DataSourceAutoConfiguration、ElasticsearchDataAutoConfiguration
 *          MongoAutoConfiguration、RabbitAutoConfiguration
 *   2、xxxxProperties：绑定配置文件的。
 *          DataSourceProperties、RedisProperties、xxxxProperties
 *   3、xxxxTemplate：SpringBoot为操作这个场景的中间件准备的操作工具类（模板类）
 *          RedisTemplate、JdbcTemplate、ElasticsearchRestTemplate、xxxxTemplate
 *
 *
 *
 *
 */
@EnableCustomThreadPool
@EnableScheduling //开启定时任务功能
@EnableFeignClients(basePackages = {"com.atguigu.gmall.feign.product","com.atguigu.gmall.feign.list"})
@SpringCloudApplication
public class ItemMainApplication {


    public static void main(String[] args) {
        SpringApplication.run(ItemMainApplication.class,args);
    }


}
